iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
自我挑戰組

Codewars Ruby Challenge in 30 Days系列 第 19

Codewars Ruby Challenge - Day 19/30

  • 分享至 

  • xImage
  •  

學習

  1. 多個賦值寫在同一行:當我們在宣告多個變數時,我們會寫成多行,像是 a = 1 和 b = 2,就會有兩行,今天透過龍哥的 code,發現原來可以用一行寫就好「a, b = 1, 2」,會達到同樣效果
  2. Asterisk(星號) in Ruby:「*」這個符號在 Ruby 真的蠻好用,以我目前學到的就有兩種功用 (1) 合併 (2) 炸開,用以下範例說明:
(1)合併
*name = "rz", "chen"
p name # 印出 ["rz", "chen"]
【說明】一個變數只能給它一個賦值,但透過「*」可以將同時給多個賦值,不管多少個,都會被收成一個陣列

(2)炸開
p [*(2..5)] #印出 [2, 3, 4, 5]
【說明】一般我們想產生 [2, 3, 4, 5],會用 (2..5).to_a,用 range 把 2~5 產生出來塞進 array,透過「*」可以把 (2..5) 炸開,然後放進 array 中

題目:

# 實作以下內容

# 把 code 寫在這兒!
答案需要過以下測試:
RSpec.describe do
  it "當個有禮貌的人" do
    person = Person.new('Bob', 'Smith')
    expect(person.greet).to eq 'Hello, Bob Smith!'
  end
end

我的答案

class Person
  def initialize(*name)
    @name = name.join(" ")
  end
  def greet
    "Hello, #{@name}!"
  end
end

思路:

  1. 看到題目想說怎麼只有測試而已,原來今天是 TDD(Test-Driven Development) 的部分,也就是先寫測試再開發,整個興奮(?)
  2. 從測試看來,需要有 Class、Class method,Class method 包含 initialize 與 greet
  3. 看到 initialize 有給兩個值,但最後印出來其實兩者中間只差一個空格,想到可以用「*」組合成陣列來處理

龍哥建議的答案

class Person
  def initialize(first_name, last_name)
    @first_name, @last_name = first_name, last_name
  end
  
  def greet
    "Hello, #{@first_name} #{@last_name}!"
  end
end

上一篇
Codewars Ruby Challenge - Day 18/30
下一篇
Codewars Ruby Challenge - Day 20/30
系列文
Codewars Ruby Challenge in 30 Days30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言